// 数据库初始化脚本 - 可以直接通过 Node.js 运行
const mysql = require('mysql2/promise');
require('dotenv').config();

// 数据库配置
const config = {
  host: process.env.DB_HOST || 'localhost',
  port: process.env.DB_PORT || 3306,
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'password',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
};

async function initDatabase() {
  let connection = null;
  
  try {
    console.log('开始初始化数据库...');
    
    // 首先连接到 MySQL 服务器（不指定数据库）
    connection = await mysql.createConnection({
      ...config,
      database: null
    });
    
    // 创建数据库
    await connection.query(
      'CREATE DATABASE IF NOT EXISTS password_manager DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'
    );
    console.log('✓ 数据库创建成功');
    
    // 切换到新创建的数据库
    await connection.query('USE password_manager');
    console.log('✓ 切换到 password_manager 数据库');
    
    // 创建用户表
    await connection.query(`
      CREATE TABLE IF NOT EXISTS users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          username VARCHAR(50) NOT NULL UNIQUE,
          password VARCHAR(255) NOT NULL,
          email VARCHAR(100) UNIQUE,
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
          updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
      )
    `);
    console.log('✓ 用户表创建成功');
    
    // 创建分类表
    await connection.query(`
      CREATE TABLE IF NOT EXISTS categories (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50) NOT NULL,
          description VARCHAR(255),
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
          updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
      )
    `);
    console.log('✓ 分类表创建成功');
    
    // 创建账号表
    await connection.query(`
      CREATE TABLE IF NOT EXISTS accounts (
          id INT AUTO_INCREMENT PRIMARY KEY,
          user_id INT NOT NULL,
          category_id INT,
          name VARCHAR(100) NOT NULL,
          url VARCHAR(255),
          username VARCHAR(100),
          password VARCHAR(255) NOT NULL,
          note TEXT,
          created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
          updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
          FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
          FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
      )
    `);
    console.log('✓ 账号表创建成功');
    
    // 创建索引
    await connection.query('CREATE INDEX IF NOT EXISTS idx_accounts_user_id ON accounts(user_id)');
    await connection.query('CREATE INDEX IF NOT EXISTS idx_accounts_category_id ON accounts(category_id)');
    await connection.query('CREATE INDEX IF NOT EXISTS idx_accounts_name ON accounts(name)');
    console.log('✓ 索引创建成功');
    
    // 插入默认分类数据
    const defaultCategories = [
      ['社交媒体', '微信、QQ、微博等社交媒体账号'],
      ['电子邮箱', '各种邮箱账号'],
      ['购物网站', '淘宝、京东等购物平台'],
      ['金融理财', '银行、支付平台、投资理财'],
      ['游戏娱乐', '游戏账号、娱乐平台'],
      ['工作学习', '办公软件、学习平台'],
      ['其他', '其他类型的账号']
    ];
    
    for (const [name, description] of defaultCategories) {
      await connection.query(
        'INSERT IGNORE INTO categories (name, description) VALUES (?, ?)',
        [name, description]
      );
    }
    console.log('✓ 默认分类数据插入成功');
    
    // 显示创建的表
    const [tables] = await connection.query('SHOW TABLES');
    console.log('\n创建的表：');
    tables.forEach(table => {
      console.log(`- ${Object.values(table)[0]}`);
    });
    
    console.log('\n🎉 数据库初始化完成！');
    console.log('\n下一步：');
    console.log('1. 确保 .env 文件中的数据库配置正确');
    console.log('2. 运行 npm start 启动后端服务');
    console.log('3. 访问 http://localhost:3000/health 检查服务状态');
    
  } catch (error) {
    console.error('\n❌ 数据库初始化失败：', error.message);
    console.error('\n请检查：');
    console.error('1. MySQL 服务是否正在运行');
    console.error('2. .env 文件中的数据库配置是否正确');
    console.error('3. 数据库用户是否有足够的权限');
    
  } finally {
    if (connection) {
      await connection.end();
    }
  }
}

// 运行初始化脚本
initDatabase();